#include "log.h"
#include "taskQueue.h"
#include <string.h>
#define RECLOG(ret,erroFlag,msg,name,erromsg,errnoNum) \
    do{                               \
        if((ret)==(erroFlag)){        \
            sprintf(errmsg,"%s %s\n",msg,strerror(errnoNum));\
            recoardLog(name,errmsg);  \
        }\
        else{\
            recoardLog(name,msg);\
        }\
    }while \
/* Usage:  */
int recoardLog(char *name, char *perform) {
    char LogFile[64];
    // 修正：添加目录分隔符
    sprintf(LogFile, "log/%s",name);
    
    // 打开文件，使用追加模式避免覆盖原有内容
    FILE *pLogFd = fopen(LogFile, "a+");
    if (pLogFd == NULL) {
        perror("无法打开日志文件");
        return -1;
    }
    
    time_t t;
    struct tm *tmInfo;
    char timeBuf[64];
    char logBuf[128];
    
    time(&t);
    tmInfo = localtime(&t);
    
    // 生成时间戳
    strftime(timeBuf, sizeof(timeBuf), "%Y-%m-%d %H:%M:%S", tmInfo);
    
    // 打印到控制台
    printf("操作: %s\n", perform);
    printf("时间: %s\n", timeBuf);
    
    // 修正：正确格式化日志内容
    snprintf(logBuf, sizeof(logBuf), "%s %s %s\n",name, timeBuf, perform);
    
    // 写入日志文件
    if (fputs(logBuf, pLogFd) == EOF) {
        perror("写入日志失败");
        fclose(pLogFd);
        return -1;
    }
    
    // 确保数据写入磁盘
    if (fflush(pLogFd) != 0) {
        perror("刷新缓冲区失败");
        fclose(pLogFd);
        return -1;
    }
    
    // 关闭文件
    if (fclose(pLogFd) != 0) {
        perror("关闭文件失败");
        return -1;
    }
    
    return 0;
}
